package com.le.tester.imooc.masterJUC.lock;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 描述：悲观锁和乐观锁
 * 悲观锁：适合并发写入很多的情况，适用于临界区需要持有锁的时间比较长，可以避免大量的自旋带来的消耗
 * 1.临界区有io操作
 * 2.临界区代码复杂或者循环比较长
 * 3.临界区竞争非常激烈
 *
 * 乐观锁：适合并发写入很少的情况，大部分都是读取的情况，写入数据的时候要阻塞，但是读取数据的时候应该是要能够多线程并发的
 *
 */
public class PessimismOptimismLock {
    int a;

    public static void main(String[] args) {
        //乐观锁的形式
        AtomicInteger atomicInteger = new AtomicInteger();
        atomicInteger.incrementAndGet();
    }

    //悲观锁的实现
    public synchronized void f1() {
        //a并不是线程安全的，需要加锁来保证线程的安全
        a++;

    }
}
